/**
 * 世界系统 - ECS 根系统
 * 
 * 职责：
 * 1. 管理所有游戏系统
 * 2. 集成固定时间步长更新
 * 3. 控制系统的执行顺序
 * 
 * 系统架构：
 * - 逻辑系统（Logic Systems）- 固定 20 FPS
 * - 命令执行系统（Command Execution）- 60 FPS
 * - 渲染系统（Render Systems）- 60 FPS（带插值）
 * 
 * 注意：
 * - ✅ 使用依赖注入，通过 DI 容器管理
 * - ✅ 不再使用单例模式
 * - ✅ 通过构造函数注入 FixedUpdateManager
 */

import { ECSRootSystem } from "../../core/ecs/ECSSystem";
import { Log } from "../../core/logger/LoggerGlobal";
import type { FixedUpdateManager } from "./FixedUpdateManager";
import { registerLogicSystems } from "./logic/logicRegistry";
import { registerRenderSystems } from "./render/renderRegistry";

export class WorldSystem extends ECSRootSystem {
    private initialized: boolean = false;
    private fixedUpdateManager: FixedUpdateManager;
    
    /**
     * 构造函数（通过 DI 容器注入依赖）
     * @param fixedUpdateManager 固定更新管理器
     */
    constructor(fixedUpdateManager: FixedUpdateManager) {
        super();
        this.fixedUpdateManager = fixedUpdateManager;
        Log.ecs.debug('WorldSystem 已创建');
    }
    
    /**
     * 初始化世界系统
     */
    init(): void {
        if (this.initialized) {
            Log.ecs.warn('世界系统已经初始化，跳过');
            return;
        }
        
        // ❌ 不调用 super.init()（避免自动加载 @ecs.register 的系统）
        // super.init();
        
        Log.styled('━━━━━━━━━━━━━━━━━━━━━━━━━━', 'separator');
        Log.styled('🌍 初始化世界系统', 'title');
        
        // 1. 配置固定更新管理器
        this.fixedUpdateManager.configure({
            logicFPS: 20,              // 逻辑系统 20 FPS
            maxDeltaTime: 0.25,        // 最大单帧时间 250ms
            enableInterpolation: true, // 启用插值
            enableStats: true          // 启用统计
        });
        
        // 2. ✅ 通过注册器注册逻辑系统（固定 20 FPS）
        registerLogicSystems(this.fixedUpdateManager);
        
        // 3. ✅ 通过注册器注册渲染系统（60 FPS）
        registerRenderSystems(this);
        
        Log.styled('━━━━━━━━━━━━━━━━━━━━━━━━━━', 'separator');
        Log.styled('✅ 世界系统初始化完成', 'success');
        Log.ecs.info('架构: 固定时间步长 + 插值渲染');
        Log.ecs.info('逻辑: 20 FPS | 渲染: 60 FPS');
        
        this.initialized = true;
    }
    
    /**
     * 每帧更新（约 60 FPS，由 Cocos 驱动）
     */
    execute(dt: number): void {
        if (!this.initialized) return;
        
        // 1. 固定时间步长更新（内部会多次调用逻辑系统）
        this.fixedUpdateManager.update(dt);
        
        // 2. 执行渲染系统（每帧一次，60 FPS）
        super.execute(dt);
    }
    
    /**
     * 销毁
     */
    destroy(): void {
        Log.ecs.info('销毁世界系统...');
        
        this.fixedUpdateManager.clear();
        this.initialized = false;
    }
    
    /**
     * 获取固定更新管理器（供外部使用）
     */
    getFixedUpdateManager(): FixedUpdateManager {
        return this.fixedUpdateManager;
    }
}
